<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=789713
-->
<head>
  <meta charset="utf-8">
  <title>Test for Bug 789713</title>
  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=789713">Mozilla Bug 789713</a>
<p id="display"></p>
<div id="content" style="display: none">
<iframe id="ifr"></iframe>
</div>
<pre id="test">
<script type="application/javascript">

/** Test for Bug 789713 **/

function go() {
  var pass = true;
  var doc = document.getElementById('ifr').contentDocument;

  // Tree walkers use nsDOMGenericSH, which has a spineless PreCreate.
  var walker = doc.createTreeWalker(doc.body);
  pass = pass && (walker.root === doc.body);

  // First, do the document.domain operation. This shouldn't crash.
  document.domain = "example.org";

  // Now, make sure that we still can't access cross-origin properties despite
  // the fact that the WN is shared under the hood.
  try {
    walker.root;
    pass = false;
  } catch (e) { pass = pass && /Permission denied/.exec(e.message); }
  window.parent.postMessage(pass, '*');
}

// We can't set document.domain on mochi.test, because it's forbidden to set
// document.domain to a TLD.
var ifr = document.getElementById('ifr');
if (window.location.hostname == "mochi.test") {
  SimpleTest.waitForExplicitFinish();
  ifr.src = window.location.toString().replace("mochi.test:8888", "test1.example.org").split('?')[0];
  window.onmessage = function(message) { ok(message.data, "Test succeeded and didn't crash"); SimpleTest.finish(); };
} else {
  ifr.src = "file_empty.html";
  ifr.onload = go;
}

</script>
</pre>
</body>
</html>
